package com.ehome.poct.core.api.dto.order;

import com.ehome.core.entity.DTO;
import com.ehome.poct.base.api.enums.BusinessOrderTypeEnums;
import com.ehome.poct.base.api.enums.CheckStatusEnums;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.experimental.Accessors;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 检测订单DTO
 *
 * @author muqiu
 * @Date 2022-03-19 15:56
 */
@EqualsAndHashCode(callSuper = true)
@Data
@ToString(callSuper = true)
@Accessors(chain = true)
public class TestOrderDTO extends DTO {

    /**
     * 主键ID
     */
    @ApiModelProperty("主键ID")
    private Long testOrderId;
    /**
     * 检测订单号
     */
    @ApiModelProperty("检测订单号")
    private String testOrderNo;
    /**
     * 外部订单号
     */
    @ApiModelProperty("外部订单号")
    private String outOrderNo;
    /**
     * 交易流水号
     */
    @ApiModelProperty("交易流水号")
    private String outTransactionNo;
    /**
     * 订单类型1：常规支付订单5：免费订单
     */
    @ApiModelProperty("订单类型 1：常规支付订单 5：免费订单")
    private Integer orderType;
    /**
     * 订单名称
     */
    @ApiModelProperty("订单名称")
    private String name;
    /**
     * 下单用户（诊所）
     */
    @ApiModelProperty("下单用户（诊所）")
    private Long clinicId;
    /**
     * 订单金额
     */
    @ApiModelProperty("订单金额")
    private BigDecimal totalMoney;
    /**
     * 应付金额
     */
    @ApiModelProperty("应付金额")
    private BigDecimal payMoney;
    /**
     * 折扣金额
     */
    @ApiModelProperty("折扣金额")
    private BigDecimal discountMoney;
    /**
     * 优惠券金额
     */
    @ApiModelProperty("优惠券金额")
    private BigDecimal couponMoney;
    /**
     * 活动金额（满减，平台赠送等等）
     */
    @ApiModelProperty("活动金额（满减，平台赠送等等）")
    private BigDecimal promotionMoney;
    /**
     * 运费金额
     */
    @ApiModelProperty("运费金额")
    private BigDecimal freightMoney;
    /**
     * 支付渠道
     */
    @ApiModelProperty("支付渠道")
    private Integer payChannel;
    /**
     * 支付方式【0:支付宝支付; 5:微信支付; 10:云闪付支付; 20:银行卡支付;25:苏中优惠卷支付】
     */
    @ApiModelProperty("支付方式【0:支付宝支付; 5:微信支付; 10:云闪付支付; 20:银行卡支付;25:苏中优惠卷支付】")
    private Integer payType;
    /**
     * 订单来源（1 金标仪app
     */
    @ApiModelProperty("订单来源（1 金标仪app ")
    private Integer sourceType;
    /**
     * 交易类型【JSAPI:微信公众号支付/微信小程序支付/支付宝服务窗/云闪付支付; NATIVE:扫码支付(支付宝); APP:APP支付(微信); MWEB:H5支付; APP-MINI:APP跳转小程序支付(微信、云闪付、支付宝)】
     */
    @ApiModelProperty("交易类型【JSAPI:微信公众号支付/微信小程序支付/支付宝服务窗/云闪付支付; NATIVE:扫码支付(支付宝); APP:APP支付(微信); MWEB:H5支付; APP-MINI:APP跳转小程序支付(微信、云闪付、支付宝)】")
    private Integer tradeType;
    /**
     * 订单状态订单状态【0:未支付;2:已冲正;3:已转退款;5:支付关闭;8:支付撤消;10:支付失败;14退款中;15退款成功;16退款失败;20支付成功;22:支付完结】
     */
    @ApiModelProperty("订单状态订单状态【0:未支付;2:已冲正;3:已转退款;5:支付关闭;8:支付撤消;10:支付失败;14退款中;15退款成功;16退款失败;20支付成功;22:支付完结】")
    private Integer status;
    /**
     * 支付时间
     */
    @ApiModelProperty("支付时间")
    private LocalDateTime payTime;
    /**
     * 付款人id (openid
     */
    @ApiModelProperty("付款人id (openid")
    private String payUserCode;
    /**
     * 备注
     */
    @ApiModelProperty("备注")
    private String note;
    /**
     * 是否已支付
     */
    @ApiModelProperty("是否已支付")
    private Boolean isPay;
    /**
     * 分账状态（0:未分账; 5:处理中; 10:分账失败; 15:分账成功）
     */
    @ApiModelProperty("分账状态（0:未分账; 5:处理中; 10:分账失败; 15:分账成功）")
    private Integer profitBillStatus;
    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间")
    private LocalDateTime createTime;
    /**
     * 创建人
     */
    @ApiModelProperty("创建人")
    private Long createBy;
    /**
     * 更新时间
     */
    @ApiModelProperty("更新时间")
    private LocalDateTime updateTime;
    /**
     * 更新人
     */
    @ApiModelProperty("更新人")
    private Long updateBy;
    /**
     * 逻辑删除
     */
    @ApiModelProperty("逻辑删除")
    private Integer isDelete;

    @ApiModelProperty("订单项")
    private List<TestOrderItemDTO> items;


    private String payUrl;

    private Long patientId;

    @ApiModelProperty("检测状态")
    private CheckStatusEnums checkStatus;

    @ApiModelProperty("业务订单类型")
    private BusinessOrderTypeEnums businessOrderType;

    /**
     * 业务员Id
     */
    private Long agentId;
}